#ifndef __BOSS_COMPONENTS_REGISTRY_IFACES_H__
#define __BOSS_COMPONENTS_REGISTRY_IFACES_H__

#include "../../../include/ifaces_core.h"

namespace Boss
{

	struct IServiceModuleInfo
		: public Boss::IBase
	{
		BOSS_DECLARE_IFACE_UUID(90e62a9d-5e82-4e19-b167-ad6035e18fb9)

		virtual TResult BOSS_CALL_TYPE GetModuleId(IVariant **moduleId) const = 0;
		virtual TResult BOSS_CALL_TYPE GetModuleCoClasses(IEnum **coClassIds) const = 0;
		virtual TResult BOSS_CALL_TYPE GetModulePath(IVariant **path) const = 0;
		virtual TResult BOSS_CALL_TYPE GetModuleName(IVariant **path) const = 0;
	};

	struct IServiceRegistry
		: public Boss::IBase
	{
		BOSS_DECLARE_IFACE_UUID(9ec63dca-82cb-4386-bcc7-01d6db669840)

		virtual TResult BOSS_CALL_TYPE GetModuleIdByCLSID(TGuid classId, IVariant **moduleId) const = 0;
		virtual TResult BOSS_CALL_TYPE GetModuleCoClasses(TGuid moduleId, IEnum **coClassIds) const = 0;
		virtual TResult BOSS_CALL_TYPE GetModulePath(TGuid moduleId, IVariant **path) const = 0;
		virtual TResult BOSS_CALL_TYPE EnumAllModules(IEnum **modules) const = 0;
	};

	struct IServiceRegistryCtrl
		: public Boss::IBase
	{
		BOSS_DECLARE_IFACE_UUID(326ea354-504b-40e0-a3dd-482f1d83f0c6)

		virtual TResult BOSS_CALL_TYPE Init(IVariant *path) = 0;

		virtual TResult BOSS_CALL_TYPE RegModule(IVariant *path) = 0;
		virtual TResult BOSS_CALL_TYPE UnRegModule(IVariant *path) = 0;
	};

}

#endif	// !__BOSS_COMPONENTS_REGISTRY_IFACES_H__
